package cn.school.basics.service;


import cn.school.basics.vo.BaseSpaceLocationVO;
import cn.school.basics.vo.DormitoryBerthVO;
import cn.school.basics.vo.LocationTreeNode;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface BaseSpaceLocationService extends IService<BaseSpaceLocationVO> {
    /**
     * 分页查空间信息
     * @param vo
     * @return
     */
    IPage<BaseSpaceLocationVO> findBaseSpaceLocationPageList(BaseSpaceLocationVO vo);

    /**
     * 新增or修改空间信息
     * @param vo
     * @return
     */
    int addOrUpdateBaseSpaceLocationInfo(BaseSpaceLocationVO vo);

    /**
     * 删除空间信息
     * @param vo
     * @return
     */
    int deleteBaseSpaceLocationInfo(BaseSpaceLocationVO vo);

    /**
     * 根据ID查询空间信息
     * @param id
     * @return
     */
    BaseSpaceLocationVO findSpaceLocationDetails(Long id);

    /**
     * 获取空间位置的整个树
     * */
    List<LocationTreeNode> geNodeTree();

    /**
     * 获取空间位置树每个结点的，全路径中文名称。如 xxx楼/xx层/某某室
     * */
    Map<Long, String> getNodeAllDirNameMap();

    /**
     * 获取空间位置树每个结点的，全路径节点ID xxxLevel1Id/xxxLevel2Id/xxxLevel3Id
     * */
    List<Long> getNodeAllDirPidList(Long id);

    /**
     * 按类型查询空间信息
     * @param type
     * @return
     */
    List<BaseSpaceLocationVO> locationTypeList(String type);


    /**
     * 查询位置详情
     * @param id
     * @return
     */
    BaseSpaceLocationVO locationDetails(String id);


    /**
     * 查询宿舍的全部床位
     * @param locationId
     * @return
     */
    List<DormitoryBerthVO> getDormitoryBerthList(String locationId);

    /**
     * 修改床位
     * @param vo
     * @return
     */
    int updateDed(DormitoryBerthVO vo);

    List<BaseSpaceLocationVO> findBuildingSon(Long pid);

    BaseSpaceLocationVO buildingAddOrUpdate(BaseSpaceLocationVO vo);

    BaseSpaceLocationVO buildingDelete(BaseSpaceLocationVO vo);

    boolean buildingDelete(Integer id);
//    /**
//     * 查询这栋楼的层数
//     * @param locationPid
//     * @return
//     */
//    int findLevelNum(Integer locationPid);

}
